package futbol.tacticas.concursantes.RCA2008;

import futbol.tacticas.concursantes.Tactica;
import java.awt.Color;
import java.awt.Point;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;

import futbol.tacticas.Comando;
import futbol.tacticas.ComandoGolpearBola;
import futbol.tacticas.ComandoIrA;
import futbol.tacticas.ComandoPase;
import futbol.tacticas.ComandoTiroAPuerta;
import futbol.tacticas.SituacionJugadores;

/**
 *
 */
public class RCA2008 implements Tactica{
    

    private int nValores[][]={
        {-150,0,4}, // Jugador 1: arquero
        {-115,35,3}, // Jugador 2
        {-90,15,3}, // Jugador 3
        {-100,-15,3}, // Jugador 4      
        {-120,-40,3}, // Jugador 5
        {-50,0,8}, // Jugador 6
        {20,50,8}, // Jugador 7
        {10,-25,8}, // Jugador 8
        {45,-45,10}, // Jugador 9
        {120,30,8}, // Jugador 10
        {100,-30,8} // Jugador 11
    };

	public RCA2008() {
	}
    
    public String getNombre() {
        return "R.C.A. 2008";
    }

    public Color getColor1() {
    	return Color.BLUE;
    }

    public Color getColor2() {
    	return Color.WHITE;
    }

    public Color getColorNumero() {
    	return Color.RED;
    }

    public int getFuerza(int n) {
        return nValores[n][2];
    }

    public int getXInicial(int n) {
        return nValores[n][0];
    }

    public int getYInicial(int n) {
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj) {
    	
        Vector<Comando> comandos = new Vector<Comando>();
        
        int arquero = 0;
		Point bola = sj.getBola();
        
        // ubicacion del arquero
		comandos.add(new ComandoIrA(arquero, nValores[arquero][0], (bola.getY()/75) * 35));
		
		int jugMasCercano = sj.getMiJugadorMasCerca(bola.getX(), bola.getY());
		if(jugMasCercano == arquero) {
			jugMasCercano = sj.getSiguienteJugador(arquero);
		}
		int jugMasCercano2 = sj.getSiguienteJugador(jugMasCercano);
		
		// buscan la pelota los mas cercanos
		comandos.add(new ComandoIrA(jugMasCercano, bola.getX(), bola.getY()));
		comandos.add(new ComandoIrA(jugMasCercano2, bola.getX(), bola.getY()));
		
		// los que defienden el area marcan al de la pelota si esta en el area
		
		// ubicacion del resto de jugadores
		for (int n=1; n<11; n++){
			if(n != jugMasCercano && n != jugMasCercano2) {
				comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
			}
		}
				
		// patea la defensa
		for (int n=0; n<6; n++){
			
			if(hayContrario(n, sj)){
				comandos.add(new ComandoPase(n, jugMasCercano2));
			}
			else {
				comandos.add(new ComandoTiroAPuerta(n, 0));
			}
		}

		// patean los delanteros
		for (int n=6; n<11; n++){
			
			if(hayContrario(n, sj)){
				comandos.add(new ComandoTiroAPuerta(n, 10));
			}
			else {
				comandos.add(new ComandoTiroAPuerta(n, 0));
			}
		}

		return comandos;
    }		
		
		
	private boolean hayContrario(int mijug, SituacionJugadores sj) {
		boolean ret = false;
		
		int miX = nValores[mijug][0];
		int miY = nValores[mijug][1];
		for (int i = 0; i < 11; i++) {
			double x = sj.getContrario()[i].getX();
			double y = sj.getContrario()[i].getY();
			
			if(Math.abs(x) > Math.abs(miX)) {
				if(Math.abs(y) < Math.abs(miY)) {
					ret = true;
				}
			}
		}
		
		return ret; 
	}
}
